package com.wst.system.server.service.impl;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wst.system.config.exception.GlobalExcetion;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wst.system.server.entity.SysConfig;
import com.wst.system.server.mapper.SysConfigMapper;
import com.wst.system.server.service.SysConfigService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.BeanUtils;
import com.wst.system.server.entity.vo.SysConfigVo;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import com.wst.system.server.entity.vo.PageSearchVo;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author X.I.O
 * @since 2025-03-04
 */
@Service
@Transactional
public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements SysConfigService {


    private Map<String,SysConfig> sysConfigMap;



    public void saveOrUpdateSysConfig(Map<String,Object> map) throws GlobalExcetion{
        if(map!=null && !map.isEmpty()){
            map.forEach((k,v)->{
                SysConfig sysConfig=this.getSysConfigByKey(k);
                if(sysConfig!=null){
                    sysConfig.setSysValue(String.valueOf(v));
                    this.updateById(sysConfig);
                    sysConfigMap.put(k,sysConfig);
                }
            });
        }
    }

    public IPage<SysConfig> page(PageSearchVo vo) throws GlobalExcetion{
        LambdaQueryWrapper<SysConfig> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        IPage<SysConfig> iPage=super.baseMapper.selectPage(new Page(vo.getPageNum(), vo.getPageSize()),lambdaQueryWrapper);
        return iPage;
    }

    public SysConfig getSysConfigByKey(String key){
        return sysConfigMap.get(key);
    }

    @Override
    public SysConfig getSysConfigByKey(String key, String defalutValue) {
        SysConfig sysConfig=sysConfigMap.get(key);
        if(sysConfig!=null){
            return sysConfig;
        }
        LambdaQueryWrapper<SysConfig> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(SysConfig::getSysKey,key);
        SysConfig config=this.baseMapper.selectOne(lambdaQueryWrapper);
        if(config!=null){
            sysConfigMap.put(key,config);
            return config;
        }else {
            sysConfig=new SysConfig();
            sysConfig.setSysKey(key);
            sysConfig.setSysValue(defalutValue);
            sysConfig.setSysNote("系统默认生成");
            this.baseMapper.insert(sysConfig);
        }
        return sysConfig;
    }

    @Override
    public SysConfig getWebName() {
        return this.getSysConfigByKey("web_name","默认网站名称");
    }

    @Override
    public SysConfig getWebDomainName() {
        return this.getSysConfigByKey("web_domain_name","example.com");
    }

    @Override
    public SysConfig getCacheTime() {
        return this.getSysConfigByKey("cache_time","30");
    }

    @Bean
    public void init(){
        if(sysConfigMap==null){
            sysConfigMap=new ConcurrentHashMap<>();
        }
        List<SysConfig> sysConfigList=this.list();
        if(sysConfigList!=null){
            for(SysConfig sysConfig:sysConfigList){
                sysConfigMap.put(sysConfig.getSysKey(),sysConfig);
            }
        }
    }
}